/**
 * Description:
 * Class Name:HashtableTest
 * Date:2022/3/6 14:26
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第8章_Java集合._8_6_增强的Map集合._8_6_2_改进的HashMap和Hashtable实现类;

import java.util.Hashtable;

class A{
    int count;
    public A(int count){
        this.count = count;
    }
    // 根据count值来判断两个对象是否相等

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        A a = (A) o;
        return count == a.count;
    }

    @Override
    public int hashCode() {
        return this.count;
    }
}

class B{
    // 重写equals()方法，B对象与任何对象都返回true
    public boolean equals(Object o){
        return true;
    }
}

public class HashtableTest {
    public static void main(String[] args) {
        var ht = new Hashtable();
        ht.put(new A(60000), "疯狂Java讲义");
        ht.put(new A(87563), "轻量级Java EE企业应用实战");
        ht.put(new A(1232), new B());
        System.out.println(ht);

        // 只要两个对象通过equals()方法比较返回true
        // Hashtable就会认为它们是相等的value
        // 由于Hashtable 中有一个B对象
        // 它与任何对象通过equals()方法比较都相等，所以下面输出true
        System.out.println(ht.containsValue("测试字符串"));              // 输出true

        // 只要两个A对象的count相等，它们通过equals()方法比较返回true，且hashCode值相等
        System.out.println(ht.containsValue(new A(87563)));     // 输出true

        ht.remove(new A(1232));
        System.out.println(ht);
    }
}
